x

Система исключений

Проявление ошибок

  • На этапе компиляции - проверяет компилятор
    • синтаксические ошибки
    • ошибки типов данных
  • На этапе выполнения - возникают во время работы
    • отсутствие ресурса
    • ошибки данных
    • логические ошибки

Система исключений

  • Специальный объект - исключение
    • создается системой (JVM) или программой (new)
    • выбрасывается (throw)
    • требует обработки в коде
      • try - код, где может возникнуть
      • catch - код, отлавливающий исключение
      • finally - код, завершающий обработку

Иерархия классов исключений

Unchecked

  • Непроверяемое или неконтроллируемое исключение
  • Компилятору все равно, обработано или нет
  • Выбрасывается виртуальной машиной
  • Класс RuntimeException и его потомки:
    • Проблема в коде
    • Можно обработать
  • Класс Error и его потомки
    • Критическая ошибка
    • Можно обработать, но уже поздно

Checked

  • Проверяемое или контролируемое исключение
  • Обычно явно выбрасывается в программе
  • Вызывается внешними причинами
  • Компилятор проверяет, что про него не забыли: catch or throw
  • Если понятно, что делать - обработать
  • Если нет - передать выше

try-catch-finally

try {
    // проблемный код
} catch (Exception e) {
    // e - объект ошибки
} finally {
    // всегда выполнится
}
Можно писать IOException | MyException | ... e

Для игнора: Exception _

Проброс исключения

Через ключевое слово throws

void method() throws Exception {

}

Исключение пробрасывается, пока не будет поймано, либо в main, а оттуда вылет с программы
P.S. можно писать как для checked, так и для unchecked

try-with-resources

Автозакрытие ресурсов - интерфейс AutoCloseable

try (File f = open("name")) {
    int x = f.readInt();
    result = 1 / x;
    calculate(result);
} catch (IOException e) {
    // ...
}
// не надо писать finally для закрытия файла
Left-click: follow link, Right-click: select node, Scroll: zoom
x